package com.hbjycl.bean;

import java.io.Serializable;

import org.apache.commons.lang.StringUtils;
import org.hibernate.HibernateException;
import org.hibernate.engine.spi.SessionImplementor;
import org.hibernate.id.UUIDHexGenerator;

import com.hbjycl.entity.BaseEntity;

/**
 * 扩展UUIDHexGenerator ID生成策略 当用户填写ID字段的值时，使用用户的ID，用户未填写ID值，则生成UUID负值给ID
 * 
 * @author wxp
 *
 * @datetime 2014年12月22日下午4:21:21
 */
public class UseIdOrGenerate extends UUIDHexGenerator
{
    @Override
    public Serializable generate(SessionImplementor session, Object obj) throws HibernateException
    {
        if (obj == null)
            throw new HibernateException(new NullPointerException());
        
        if (!StringUtils.isNotBlank((((BaseEntity) obj).getId())))
        {
            // 自动生成UUID
            Serializable id = super.generate(session, obj);
            return id;
        }
        else
        {
            // 返回用户设置的UUID值
            return ((BaseEntity) obj).getId();
            
        }
    }
}